/**
 * @file livre.c
 * @brief Fichier source du module livre.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

/* *********************************************************************

                       Librairies de livre                          

********************************************************************* */

#include "livre.h"

/* *********************************************************************

                        Fonctions                                      

********************************************************************* */
void init_Liv(Livre *ptr)
{
  if(ptr)
    {
      ptr->id=0;
      ptr->volume=0;
      ptr->numCollection=0;
      ptr->taille=0;
      ptr->nbPage=0;
      ptr->isbn=NULL;
      ptr->resume=NULL;
      ptr->illustration=0;
      ptr->pCollection=NULL;
      ptr->pEdition=NULL;
      ptr->maj = 0;
      ptr->sup = 0;
    }
}
void liberer_Liv(Livre *ptr)
{
  if(ptr)
    {
      ptr->id=0;
      ptr->volume=0;
      ptr->numCollection=0;
      ptr->taille=0;
      ptr->nbPage=0;
      ptr->illustration=0;
      if(ptr->isbn)
	{
	  free(ptr->isbn);
	  ptr->isbn=NULL;
	}
      if(ptr->resume)
	{
	  free(ptr->resume);
	  ptr->resume=NULL;
	}
      if(ptr->pCollection)
	{
	  detruire_Col(&(ptr->pCollection));
	}
      if(ptr->pEdition)
	{
	  detruire_Typ(&(ptr->pEdition));
	}
    }
}
Livre * creer_Liv()
{
	Livre *livre = (Livre *)malloc(1*sizeof(Livre));
	if(livre==NULL)
	{
		fprintf(stderr,"memoire insuffisante");
		exit(EXIT_FAILURE);
	}
	init_Liv(livre);
	return livre;
}

void detruire_Liv(Livre **livre)
{
	if(livre && (livre))
	{
		liberer_Liv((*livre));
		free((*livre));
		(*livre) = NULL;
	}
}

void copier_Liv(Livre **dest, const Livre *src)
{
  if((*dest) == NULL)
    {
      (*dest) = creer_Liv();
    }
  
  if(src)
    {
      (*dest)->id = src->id;
      (*dest)->volume = src->volume;
      (*dest)->numCollection = src->numCollection;
      (*dest)->taille = src->taille;
      (*dest)->nbPage = src->nbPage;
      copier_Uti(&((*dest)->isbn), src->isbn);
      copier_Uti(&((*dest)->resume), src->resume);
      (*dest)->illustration = src->illustration;
      copier_Col(&((*dest)->pCollection), src->pCollection);
      copier_Typ(&((*dest)->pEdition), src->pEdition);	  
    }
  else
    detruire_Liv(dest);
}

int getId_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->id;
  return 0;
}

void setId_Liv(Livre *ptr, const int val)
{
  if(ptr)
    ptr->id = val;
}

int getVolume_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->volume;
  return 0;
}

void setVolume_Liv(Livre *ptr, const int val)
{
  if(ptr)
    ptr->volume = val;
}

int getNumCollection_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->numCollection;
  return 0;
}

void setNumCollection_Liv(Livre *ptr, const int val)
{
  if(ptr)
    ptr->numCollection = val;
}

int getTaille_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->taille;
  return 0;
}

void setTaille_Liv(Livre *ptr, const int val)
{
  if(ptr)
    ptr->taille = val;
}

int getNbPage_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->nbPage;
  return 0;
}

void setNbPage_Liv(Livre *ptr, const int val)
{
  if(ptr)
    ptr->nbPage = val;
}

char * getIsbn_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->isbn;
  return NULL;
}

void setIsbn_Liv(Livre *ptr, const char * val)
{
  if(ptr)
    copier_Uti(&(ptr->isbn), val);
}

char * getResume_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->resume;
  return NULL;
}

void setResume_Liv(Livre *ptr, const char * val)
{
  if(ptr)
    copier_Uti(&(ptr->resume), val);
}

int getIllustration_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->illustration;
  return NON_LIV;
}

void setIllustration_Liv(Livre *ptr, const int val)
{
  if(ptr)
    ptr->illustration = val;
}

Collection * getPCollection_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->pCollection;
  return NULL;
}

void setPCollection_Liv(Livre *ptr, Collection * val)
{
  if(ptr)
    copier_Col(&(ptr->pCollection), val);
}

TypeEdition * getPEdition_Liv(const Livre * ptr)
{
  if(ptr)
    return ptr->pEdition;
  return NULL;
}

void setPEdition_Liv(Livre *ptr, TypeEdition * val)
{
  if(ptr)
    copier_Typ(&(ptr->pEdition), val);
}

void setMaj_Liv(Livre *ptr, const char b)
{
  if(ptr)
    {
      ptr->maj = b;
      if(b == 1)
	ptr->sup = !b;
    }
}

char getMaj_Liv(const Livre *ptr)
{
  if(ptr)
    return ptr->maj;
  return 0;
}

void setSup_Liv(Livre *ptr, const char b)
{
  if(ptr)
    {
      ptr->sup = b;
      if(b == 1)
	ptr->maj = !b;
    }
}

char getSup_Liv(const Livre *ptr)
{
  if(ptr)
    return ptr->sup;
  return 0;
}
